package locations.actions;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import locations.dao.DAOFactory;
import locations.dao.PacientDAO;
import locations.model.Pacient;

import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;



public class SavePacientAction extends ActionSupport implements ModelDriven<Pacient>, ServletRequestAware, ServletResponseAware  {
	
            private static final long serialVersionUID = -8124967730231198191L;

            private HttpServletRequest request; 
            private HttpServletResponse response; 
            private Pacient pacient = new Pacient();

            public String execute(){
                    PacientDAO dao = DAOFactory.getPacientDAO();
                    dao.save(this.pacient);
                    return SUCCESS;
            }

            public Pacient getPacient() {
                    return pacient;
            }

            public void setPacient(Pacient pacient) {
                    this.pacient = pacient;
            }

            @Override
            public Pacient getModel() {
                    return this.pacient;
            }

            public HttpServletRequest getRequest() {
                    return request;
            }

            @Override
            public void setServletRequest(HttpServletRequest request) {
                    this.request = request;
            }

            @Override
            public void setServletResponse(HttpServletResponse response) {
                    this.response = response;
            }

            public HttpServletResponse getResponse(){
                    return this.response;
            }
            
            public void validate()
            {
                boolean ok = true;
                String nombre = this.getPacient().getNombre();
                String apellido = this.getPacient().getApellido();
                String documento = this.getPacient().getDocumento();
                if (nombre.equals(""))
                {
                    addFieldError("nombre", "El nombre no puede estar en blanco");
			ok = false;
                }
                if (apellido.equals(""))
                {
			addFieldError("apellido", "El apellido no puede estar en blanco");
			ok = false;
		}
		if (documento.equals(""))
                {
			addFieldError("documento", "El documento no puede estar en blanco");
			ok = false;
		}
                if (ok)
                {
                    PacientDAO dao = DAOFactory.getPacientDAO();
                    long auxId = (this.getPacient().getId() == null? 0 : this.getPacient().getId());
                    if (dao.exists(documento, auxId))
                    {
                        addFieldError("documento", "Ya existe un paciente con ese documento");
			ok = false;
                    }
                }
                if (this.getPacient().getLocation().getLongitude() != null)
                {
                    if (! this.getPacient().getLocation().getLongitude().toString().matches("^[-]?[0-9]{1,3}\\.[0-9]+"))
                    {
                            addFieldError("longitud", "La longitud ingresada no es válida");
                            ok = false;
                    }
                }
                if (this.getPacient().getLocation().getLatitude() != null)
                {
                    if (! this.getPacient().getLocation().getLatitude().toString().matches("^[-]?[0-9]{1,3}\\.[0-9]+"))
                    {
                            addFieldError("longitud", "La latitud ingresada no es válida");
                            ok = false;
                    }
                }
                if ((this.getPacient().getLocation().getLatitude() == null) ^ (this.getPacient().getLocation().getLongitude() == null))
                {
                    addFieldError("longitud", "Es necesario que ingrese la latitud y la longitud, o ninguno de ellos");
                    ok = false;
                }
            }
}